package ua.org.oa.ishchenko;


/*Задание №1
Создайте класс, в котором присутствуют переменные класса 
всех примитивных типов. Выведите на экран значение полей 
класса без предварительной инициализации.  
Повторите тоже самое для локальных переменных.
*/
public class Practical1 {
	public static byte b;
	public static short s;
	public static int i;
	public static long l;
	public static float f;
	public static double d;
	public static char c;
	public static boolean bo; 
	
	public static void main(String[] args) {
		task1();
		task2();
		task3();
		task4();
		task5();
		task6();
		task7();
		task8();
		task9();
		task10();
	}		
	
	public static void task1(){
		byte myByte = b;
		short myShort= s;
		int myInt = i;
		long myLong = l;
		float myFloat = f;
		double myDouble = d;
		char myChar = c;
		boolean myBoolean = bo;
			System.out.println("Ответ на задание №1: ");
			System.out.println("Class variable of type byte = " + b);
			System.out.println("Class variable of type short = " + s);
			System.out.println("Class variable of type int = " + i);
			System.out.println("Class variable of type long = " + l);
			System.out.println("Class variable of type float = " + f);
			System.out.println("Class variable of type double = " + d);
			System.out.println("Class variable of type char = " + c);
			System.out.println("Class variable of type boolean = " + bo);
		
		System.out.println("~~~~~~~");
		
			System.out.println("Local variable of type byte = " + myByte);
			System.out.println("Local variable of type short = " + myShort);
			System.out.println("Local variable of type int = " + myInt);
			System.out.println("Local variable of type long = " + myLong);
			System.out.println("Local variable of type float = " + myFloat);
			System.out.println("Local variable of type double = " + myDouble);
			System.out.println("Local variable of type char = " + myChar);
			System.out.println("Local variable of type boolean = " + myBoolean);
			System.out.println("--------------------------------------------");
	}
	
	
/*	Задание №2
 * Создайте несколько переменных типа float. Присвойте этим переменным следующие значения:
1.;
1;
0x1;
0b1;
1.0e1;
01;
*/
	public static void task2(){
		float a = (float)1.;
		float b = 1;
		float c = 0x1;
		float d = 0b1;
		float e = (float) 1.0e1;
		float f = 01;
			System.out.println("Ответ на задание №2: ");
			System.out.println(a);
			System.out.println(b);
			System.out.println(c);
			System.out.println(d);
			System.out.println(e);
			System.out.println(f);
			System.out.println("--------------------------------------------");
	}
	
	
/* Задание №3
 * Создайте переменную типа short. Инициализаируйте ее результатом выполнения следующих операций:
- суммой двух целых чисел;
- суммой целого и дробного чисел;
- суммой значений переменных типов float и int;
- суммой значений переменных типа byte + short;
- суммой значений переменных типа float + double;
 */
	public static void task3() {
		short shotVar1 = 5 + 3;
		short shortVar2 = (short) (5 + 3.5);
		short shortVar3 = (short) (5.3f + 3);
		byte myByte = 6;
		short myShort = 2;
		short shortVar4 = (short) (myByte + myShort);
		short shortVar5 = (short) (3.2f + 5.);
			System.out.println("Ответ на задание №3: ");
			System.out.println(shotVar1);
			System.out.println(shortVar2);
			System.out.println(shortVar3);
			System.out.println(shortVar4);
			System.out.println(shortVar5);
			System.out.println("--------------------------------------------");
		
		
	}
	/* Задание №4
	Заданы значения 2-х катетов и гипотенузы треугольника.
	Проверить является ли данный треугольник прямоугольным.
	Вычисления записать выражением, состоящим из одной строки
	(используя оператор “?:”).
	*/
	public static void task4() {
		double x = 3;
		double y = 4;
		double z = 5;
		System.out.println("Ответ на задание №4: "
				+ ((z == Math.sqrt(x * x + y * y)) ? "This is a right-angled triangle" : "it is not a right triangle"));
		System.out.println("--------------------------------------------");
	}

	/* Задание №5
    Подсчитать сумму целых чисел от 1 до 20.
	 */
	public static void task5() {
		int summ = 0;
		for (int j = 0; j <= 20; j++) {
			summ += j;
		}
		System.out.println("Ответ на задание №5: " + summ);
		System.out.println("--------------------------------------------");
	}
	

/* Задание №6
 * Подсчитать сумму четных целых цисел от 1 до 20.
 */
	
	public static void task6() {
		int summ = 0;	
		for (int i = 0; i <= 20; i++) {
			if (i%2 == 0) {
				summ += i;
			}
		}
				System.out.println("Ответ на задание №6: " + summ);
				System.out.println("--------------------------------------------");
	}


/* Задание №7
 * Подсчитать сумму простых чисел в диапазоне от 1 до 20.
 */
	public static void task7() {
	int a = 1;
	int b = 20;
	int sum = 0;
		System.out.println("Ответ на задание №7: (честно содрал)");
		System.out.println("Это все простые чиста от "
				+ a + " до " + b);
		for (int i = a; i <= b; i++) {
			if (i > 1 && (factorial(i - 1) + 1) % i == 0) {
				sum += i;
				System.out.println(i);
			}
		}
		System.out.println("Сумма простых чисел от " + a + " до " + b
				+ " равно " + sum);
		System.out.println("--------------------------------------------");

	}

	public static long factorial(long n) {
		if (n == 0)
			return 1;
		return n * factorial(n - 1);
		
	}
	
/* Задание №8
 Имея три переменных типа int a, b, c выведите на экран “true”, если сумма значений двух любых из этих переменных равна значению третьей.	
 */
	public static void task8(){
		int a = 4;
		int b = 5;
		int c = 9;
		System.out.println("Ответ на задание №8: ");
			if (a + b == c || a + c == b || b + c == a ){
				System.out.println(a + b == c || a + c == b || b + c == a );
			}
				else{
					System.out.println(a + b == c || a + c == b || b + c == a );	
					
				}
			System.out.println("--------------------------------------------");
		}	
	
	
/* Задание №9
Две переменные типа int, имеют положительные значения int a - начало диапазона, int b - конец диапазона,
a>b. Вычислить среднее значение чисел в заданном диапазоне.	
*/
	
	public static void task9(){
		int a = 16;
		int b = 10;
		int summ = 0;
		int i = 0;
		double middleValue = 0;
		System.out.println("Ответ на задание №9: ");
		while(b++ < a){
			if (b == a){
				break;
			}
			else{ 
				
			summ += b;
			i ++;
			}
		}
		middleValue = (double)summ / i;
		System.out.println(middleValue);
		
//		for (;  b < a ; b++) {
//			summ = b + 1;
//			summ += b;
//		}
//		double middleValue = summ / i;
		//System.out.println(middleValue);
		System.out.println("--------------------------------------------");
	}
	
/* Задание №10	
Написать программу расчета обязательных платежей кредитора при пользовании банковским кредитом.
Задание:
а) Для каждого месяца вывести на экран сумму к оплате по телу кредита и начисленные проценты
б) Суммарное значение выплаченных процентов за период пользования кредитом.
Исходные данные: Сумма кредита, процентная ставка, срок кредитования.
 */
	
	public static void task10() {
		final double creditSumm = 12000;
		final int monthSumm = 12;
		double bodyEveryMonth = creditSumm / monthSumm;
		final double percent = 12;
		double overPaymentPerMonth;
		double totalOverPaymentPerMonth = 0;
		System.out.println("Ответ на задание №10: ");
		
	for (int month = 1 ; month <= monthSumm; month++) {
		bodyEveryMonth = creditSumm / monthSumm;
		bodyEveryMonth *= month;
		
		overPaymentPerMonth = (creditSumm -  bodyEveryMonth) * (percent / monthSumm / 100);
		System.out.println("Месяц " + month + " Тело кредита " + creditSumm / monthSumm +
							" Переплата процентов " + overPaymentPerMonth);	
		
		totalOverPaymentPerMonth += overPaymentPerMonth;
		}
	System.out.println("Переплата всего " + totalOverPaymentPerMonth);
	System.out.println("--------------------------------------------");
	}
}
	

